package com.sx.micowell.framework.view.chartManager

import android.graphics.Color
import android.graphics.Typeface
import android.util.Log
import androidx.core.content.ContextCompat
import com.github.mikephil.charting.animation.Easing
import com.github.mikephil.charting.charts.PieChart
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.PieData
import com.github.mikephil.charting.data.PieDataSet
import com.github.mikephil.charting.data.PieEntry
import com.github.mikephil.charting.formatter.IValueFormatter
import com.github.mikephil.charting.highlight.Highlight
import com.github.mikephil.charting.utils.ViewPortHandler
import com.sx.micowell.R
import com.sx.widget.app.DisplayUtil
import java.util.*
import kotlin.collections.ArrayList


/**
 * @Description
 * @Author 梁浩文
 * @Date 2021/8/25 15:29
 */


fun PieChart.Test(radius: Float){
    UI().let {
        setHoleRadius(radius)
    }
    var arrays = ArrayList<PieEntry>()
    for (i in 0..4) {
        arrays.add(PieEntry(1f, i.toString()))
    }
    setPieData(arrays)
}

fun PieChart.UI() {
    setUsePercentValues(false);            //使用百分比显示
    getDescription().setEnabled(false);    //设置pieChart图表的描述
    setBackgroundColor(Color.TRANSPARENT);      //设置pieChart图表背景色
    setDragDecelerationFrictionCoef(0.75f);//设置pieChart图表转动阻力摩擦系数[0,1]
//    setRotationAngle(0f);                   //设置pieChart图表起始角度
    setRotationEnabled(true);              //设置pieChart图表是否可以手动旋转
    setHighlightPerTapEnabled(true);       //设置piecahrt图表点击Item高亮是否可用

    animateY(500, Easing.EaseInOutQuad);// 设置pieChart图表展示动画效果

// 设置 pieChart 图表Item文本属性
    setDrawEntryLabels(false);              //设置pieChart是否只显示饼图上百分比不显示文字（true：下面属性才有效果）
    setEntryLabelColor(Color.parseColor("#999999"));       //设置pieChart图表文本字体颜色
    setEntryLabelTypeface(Typeface.DEFAULT);     //设置pieChart图表文本字体样式

// 设置 pieChart 内部圆环属性
    setDrawHoleEnabled(true);              //是否显示PieChart内部圆环(true:下面属性才有意义)
//    setHoleRadius(28f);                    //设置PieChart内部圆的半径(这里设置28.0f)
    setTransparentCircleRadius(0f);       //设置PieChart内部透明圆的半径(这里设置31.0f)
    setTransparentCircleColor(Color.TRANSPARENT);//设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色
    setTransparentCircleAlpha(50);         //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明
    setHoleColor(Color.TRANSPARENT);             //设置PieChart内部圆的颜色
    setDrawCenterText(false);               //是否绘制PieChart内部中心文本（true：下面属性才有意义）
    setCenterTextTypeface(Typeface.DEFAULT);       //设置PieChart内部圆文字的字体样式
    setCenterText("运动模式");                 //设置PieChart内部圆文字的内容
    setCenterTextColor(Color.parseColor("#333333"));         //设置PieChart内部圆文字的颜色

// 获取pieCahrt图列

// 获取pieCahrt图列
    getLegend().isEnabled = false //是否启用图列（true：下面属性才有意义）

}

fun PieChart.setPieData(arrays: List<PieEntry>) {
    if(arrays==null||arrays.size==0){
        return
    }
    var anAngle=360/arrays.size                         //每个模块的角度分配
    setRotationAngle((270-anAngle/2).toFloat());
    var pieDataSet = PieDataSet(arrays, null)
    pieDataSet.setSliceSpace(resources.getDimension(R.dimen.dp_3));           //设置饼状Item之间的间隙
    pieDataSet.setSelectionShift(0f);      //设置饼状Item被选中时变化的距离
    pieDataSet.setColors(Color.parseColor("#EDEDED"));           //为DataSet中的数据匹配上颜色集(饼图Item颜色)
    pieDataSet.setValueTextColor(Color.parseColor("#bbbbbb"))
    pieDataSet.setDrawValues(true)

    pieDataSet.valueTextSize=DisplayUtil.px2dip(context,resources.getDimension(R.dimen.sp_14)).toFloat()
    pieDataSet.setValueFormatter(object : IValueFormatter {
        override fun getFormattedValue(
            value: Float,
            entry: Entry?,
            dataSetIndex: Int,
            viewPortHandler: ViewPortHandler?
        ): String {
            return ((entry) as PieEntry).label.split("_")[0]
        }
    })
    data= PieData(pieDataSet)
    invalidate()
}

fun getStringByEnter(length: Int, string: String): String {
    for (i in 1..string.length) {
        if (string.substring(0, i).toByteArray(charset("UTF-8")).size > length) {
            return """
                ${string.substring(0, i - 1)}
                ${getStringByEnter(length, string.substring(i - 1))}
                """.trimIndent()
        }
    }
    return string
}


fun PieChart.setMoreDataColors(arrays: MutableList<Int>,selected: List<Int>?=null){
    var selectColor=Color.parseColor("#02CF87")
    var selectTVColor=Color.WHITE
    var unSelectColor=Color.parseColor("#EDEDED")
    var unSelectTVColor=Color.parseColor("#bbbbbb")
    var selectedColor=Color.parseColor("#02D98E")
    var selectedTVColor=Color.WHITE
    var dataSet = data.dataSet as PieDataSet
    val colors = java.util.ArrayList<Int>()
    val Textcolors = java.util.ArrayList<Int>()
    for(i in 0..dataSet.entryCount){
        if(arrays.contains(i)){
            colors.add(selectColor)
            Textcolors.add(selectTVColor)
        }else{
            if (selected!=null&&selected.contains(i)) {
                colors.add(selectedColor)
                Textcolors.add(selectedTVColor)
            }else{
                colors.add(unSelectColor)
                Textcolors.add(unSelectTVColor)
            }
        }

    }
    dataSet.colors=colors
    dataSet.setValueTextColors(Textcolors)
    invalidate()
}

fun PieChart.AngleByIndex(position: Int){
    Log.i("AngleByIndex", "AngleByIndex: "+position)
    var entryCount = data.dataSet.entryCount
    var anAngle=360/entryCount                         //每个模块的角度分配
    var rate=270-position*anAngle-anAngle/2                          //当前的角度
    setRotationAngle(rate.toFloat())
}

